ae43e7dce5abfe8206dc51ebc5854643cbd7cab1,opennms-model/src/main/java/org/opennms/netmgt/model/topology/BridgeTopology.java,BridgeTopology,parseBFTEntry,#BridgeTopologyLinkCandidate#,266

Before Change


                		linkcandidate.getBridgeTopologyPort().getNodeid(),linkcandidate.getBridgeTopologyPort().getBridgePort());
        		linkcandidate.setRole(BridgePortRole.BACKBONE);
        		linkcandidate.removeMacs(topologyLinkCandidate.getMacs());
            	linkcandidate.addTarget(topologyLinkCandidate.getBridgeTopologyPort().getNodeid());
	
        		topologyLinkCandidate.setRole(BridgePortRole.DIRECT);
            	topologyLinkCandidate.setLinkPortCandidate(null);

After Change


    	}
    }
   
	public BridgeTopologyLinkCandidate parseBFTEntry(BridgeTopologyLinkCandidate topologyLinkCandidate) {
    	/* 
    	 * This class is designed to get the topology on one bridge forwarding table at a time
    	 * so this means that the rules are written considering port1 belonging 
    	 * always to the same bridge.
    	 * 
    	 * 
    	 * We assume the following:
    	 * 
    	 * 1) there where no loops into the network (so there is a hierarchy)
    	 * 
    	 * Corollary 1
    	 * 
    	 * If exists there is only one backbone port from sw1 and sw2
    	 * If exists there is only one backbone port from sw2 and sw1
    	 * 
    	 * Corollary 2
    	 * There is only one "pseudo device" containing the bridge
    	 * 
    	 * Corollary 3
    	 * on a backbone port two different mac address must belong to the same pseudo device
    	 * 
    	 */
        for (BridgeTopologyLinkCandidate linkcandidate: bridgeTopologyPortCandidates) {
            LOG.info("parseBFTEntry: checking node {}, port {}: mac {}",linkcandidate.getBridgeTopologyPort().getNodeid(),linkcandidate.getBridgeTopologyPort().getBridgePort(), linkcandidate.getMacs());

            // regola intersezione nulla non faccio niente
            // regola intersezione nulla non faccio niente
        	if (linkcandidate.getBridgeTopologyPort().getNodeid().intValue() ==
        			topologyLinkCandidate.getBridgeTopologyPort().getNodeid().intValue()) {
        		LOG.info("parseBFTEntry: rule 00: same node: do nothing");
        		continue;
        	} 
        	if (linkcandidate.intersectionNull(topologyLinkCandidate)) {
        		LOG.info("parseBFTEntry: rule 0: intesection null: do nothing");
        		continue;
        	} 
        	// regola della dipendenza assoluta new
        	if (topologyLinkCandidate.strictContained(linkcandidate)) {
                LOG.info("parseBFTEntry: rule 1: new contained in old: adding target {} to node {},backbone port {}", topologyLinkCandidate.getBridgeTopologyPort().getNodeid(),
                		linkcandidate.getBridgeTopologyPort().getNodeid(),linkcandidate.getBridgeTopologyPort().getBridgePort());
            	linkcandidate.setRole(BridgePortRole.BACKBONE);
        		linkcandidate.removeMacs(topologyLinkCandidate.getMacs());
            	linkcandidate.addTarget(topologyLinkCandidate.getBridgeTopologyPort().getNodeid());
            	topologyLinkCandidate.setRole(BridgePortRole.DIRECT);
        		continue;
        	}

            // regola della dipendenza assoluta old
         	if (linkcandidate.strictContained(topologyLinkCandidate)) {
                 LOG.info("parseBFTEntry: rule 2: old contained in new: adding target {} to node {}, backbone port {}", linkcandidate.getBridgeTopologyPort().getNodeid(),
                 		topologyLinkCandidate.getBridgeTopologyPort().getNodeid(),topologyLinkCandidate.getBridgeTopologyPort().getBridgePort());
             	topologyLinkCandidate.setRole(BridgePortRole.BACKBONE);
             	topologyLinkCandidate.removeMacs(linkcandidate.getMacs());
             	topologyLinkCandidate.addTarget(linkcandidate.getBridgeTopologyPort().getNodeid());
             	linkcandidate.setRole(BridgePortRole.DIRECT);
             	continue;
         	} 

        	if (linkcandidate.getRole() == BridgePortRole.BACKBONE) {
        		LOG.info("parseBFTEntry: rule 3: found old backbone port: setting new port to DIRECT");
        		linkcandidate.removeMacs(topologyLinkCandidate.getMacs());
            	topologyLinkCandidate.setRole(BridgePortRole.DIRECT);
            	continue;
        	}

        	if (topologyLinkCandidate.getRole() == BridgePortRole.BACKBONE) {
        		LOG.info("parseBFTEntry: rule 4: found new backbone port: setting old port to DIRECT");
        		topologyLinkCandidate.removeMacs(linkcandidate.getMacs());
            	linkcandidate.setRole(BridgePortRole.DIRECT);
            	continue;
        	}

         	if (linkcandidate.getLinkPortCandidate() == null && topologyLinkCandidate.getLinkPortCandidate() == null) {
                LOG.info("parseBFTEntry: rule 5: no suitable data: setting candidate each other");
        		linkcandidate.setLinkPortCandidate(topologyLinkCandidate.getBridgeTopologyPort());
        		topologyLinkCandidate.setLinkPortCandidate(linkcandidate.getBridgeTopologyPort());
        		continue;
        	} 

        	if (linkcandidate.getLinkPortCandidate() != null && topologyLinkCandidate.getBridgeTopologyPort().getNodeid().intValue() == linkcandidate.getLinkPortCandidate().getNodeid().intValue()  
        			&& topologyLinkCandidate.getBridgeTopologyPort().getBridgePort().intValue() != linkcandidate.getLinkPortCandidate().getBridgePort().intValue()) {
                LOG.info("parseBFTEntry: rule 6: new contained in old: adding target {} to node {},backbone port {}", topologyLinkCandidate.getBridgeTopologyPort().getNodeid(),
                		linkcandidate.getBridgeTopologyPort().getNodeid(),linkcandidate.getBridgeTopologyPort().getBridgePort());
        		linkcandidate.setRole(BridgePortRole.BACKBONE);
        		linkcandidate.removeMacs(topologyLinkCandidate.getMacs());
            	linkcandidate.addTarget(topologyLinkCandidate.getBridgeTopologyPort().getNodeid());
	
        		topologyLinkCandidate.setRole(BridgePortRole.DIRECT);
            	topologyLinkCandidate.setLinkPortCandidate(null);
            	continue;
        	}
        	
        	if (topologyLinkCandidate.getLinkPortCandidate() != null && linkcandidate.getBridgeTopologyPort().getNodeid().intValue() == topologyLinkCandidate.getLinkPortCandidate().getNodeid().intValue()
        			&& linkcandidate.getBridgeTopologyPort().getBridgePort().intValue() != topologyLinkCandidate.getLinkPortCandidate().getBridgePort().intValue()) {
                LOG.info("parseBFTEntry: rule 7: old contained in new: adding target {} to node {}, backbone port {}", linkcandidate.getBridgeTopologyPort().getNodeid(),
                		topologyLinkCandidate.getBridgeTopologyPort().getNodeid(),topologyLinkCandidate.getBridgeTopologyPort().getBridgePort());
           		topologyLinkCandidate.setRole(BridgePortRole.BACKBONE);
        		topologyLinkCandidate.removeMacs(linkcandidate.getMacs());
        		topologyLinkCandidate.addTarget(linkcandidate.getBridgeTopologyPort().getNodeid());